package com.nothing.thread.hashmap;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtil {

    /**
     * 文件重命名
     *
     * @param path    文件目录
     * @param oldname 原来的文件名
     * @param newname 新文件名
     */
    public static void renameFile(String path, String oldname, String newname) {
        //新的文件名和以前文件名不同时,才有必要进行重命名
        if (!oldname.equals(newname)) {
            if (!path.endsWith(File.separator)) {
                path = path + File.separator;
            }
            File oldfile = new File(path + oldname);
            File newfile = new File(path + newname);
            if (!oldfile.exists()) {
                return;//重命名文件不存在
            }
            if (newfile.exists()){

            }//若在该目录下已经有一个文件和新文件名相同，则不允许重命名
            else{
                oldfile.renameTo(newfile);
            }
        } else {
        }
    }

    /**
     * 复制文件到指定的文件夹
     *
     * @param sourceFileName 指定的文件全路径名
     * @param destDir        移动到指定的文件夹
     * @return
     */
    public static void copyFileTo(String sourceFileName, String destDir, String... destName) throws IOException {
        File fileSource = new File(sourceFileName);
        File fileDest = new File(destDir);
        // 如果源文件不存或源文件是文件夹
        if (!fileSource.exists() || !fileSource.isFile()) {
            throw new RuntimeException("源文件[" + sourceFileName + "],不存在或是文件夹!");
        }
        // 如果目标文件夹不存在
        if (!fileDest.isDirectory() || !fileDest.exists()) {
            if (!fileDest.mkdirs()) {
                throw new RuntimeException("目录文件夹不存，在创建目标文件夹时失败!");
            }
        }
        String strAbsFilename = null;
        if (destName != null && destName.length != 0) {
            strAbsFilename = destDir + File.separator + destName[0];
        } else {
            strAbsFilename = destDir + File.separator + fileSource.getName();
        }
        if (new File(strAbsFilename).exists()) {
            throw new RuntimeException("文件[" + strAbsFilename + "]已经存在!");
        }
        FileInputStream fileInput = null;
        FileOutputStream fileOutput = null;
        try {
            fileInput = new FileInputStream(sourceFileName);
            fileOutput = new FileOutputStream(strAbsFilename);
            int count = -1;
            int BUFFER = 1024;
            byte[] data = new byte[BUFFER];
            while (-1 != (count = fileInput.read(data, 0, BUFFER))) {
                fileOutput.write(data, 0, count);
            }
        } catch (Exception e) {
            throw new RuntimeException("源文件[" + sourceFileName + "],目标文件夹[" + destDir + "]复制失败!", e);
        } finally {
            if (fileInput != null) {
                fileInput.close();
            }
            if (fileOutput != null) {
                fileOutput.close();
            }
        }
    }

}
